/*
 * JVM_reference.c
 *
 *  Created on: 10.12.2010
 *      Author: Tavin
 */

#include "board.h"

#include "JVM_Heap.h"

#include "JVM_Handle.h"
#include "JVM_HandlePool.h"
#include "JVM_StatusCodes.h"
#include "JVM_Class.h"

JVM_Handle_pool_t handlePool;



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_Init								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.2			Status : Working   			*/
/*																						*/
/****************************************************************************************/

uint16_t  JVM_Handle_Init()
{
	uint16_t counter;

	// clear all handles in pool
	for (counter=0;counter<HANDLES_MAX;counter++)
		JVM_Handle_Clear(counter);

	handlePool.lastHandle=0;


	return(STCD_OK);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_Clear								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.2			Status : Working   			*/
/*																						*/
/****************************************************************************************/


uint16_t  JVM_Handle_Clear(JVM_HandleNumber_t HandleNumber)
{
	if (!(HandleNumber<HANDLES_MAX))
			return(STCD_HANDLE_POOL_OVERFLOW);

		handlePool.handles[HandleNumber].dataAddress=0;
		handlePool.handles[HandleNumber].dataSize=0;
		handlePool.handles[HandleNumber].referenceCounter=0;

		return(STCD_OK);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_findGap							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.2			Status : temp   			*/
/*																						*/
/****************************************************************************************/
uint16_t  JVM_Handle_findGap(uint16_t dataSize)
{
	uint16_t counter;
	JVM_MemoryAdress_t memoryAdress;

	memoryAdress=0;


	// TODO  search for real gap !!
	for (counter=0;counter<=handlePool.lastHandle;counter++)
		{
		if (memoryAdress<handlePool.handles[counter].dataAddress+handlePool.handles[counter].dataSize)
			memoryAdress=handlePool.handles[counter].dataAddress+handlePool.handles[counter].dataSize;

		}

return(memoryAdress);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_findFreeHandle					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/
JVM_HandleNumber_t  JVM_Handle_findFreeHandle()
{
	uint16_t counter;
	JVM_HandleNumber_t handleNumber;



	for (counter=1;counter<handlePool.lastHandle;counter++)
		{
		if (handlePool.handles[counter].referenceCounter==0)
			{
			handleNumber=counter;
			return(handleNumber);
			}
		}
	handlePool.lastHandle++;
	handleNumber=handlePool.lastHandle;

return(handleNumber);
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_set								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.2			Status : temp   			*/
/*																						*/
/****************************************************************************************/
uint16_t  JVM_Handle_set(JVM_HandleNumber_t handleNumber,uint16_t dataSize)
{
	JVM_MemoryAdress_t dataAdress;

	if (handlePool.lastHandle<handleNumber)
		handlePool.lastHandle=handleNumber;

	dataAdress=JVM_Handle_findGap(dataSize);

	if (dataAdress>HEAP_SIZE)
		return(STCD_OUT_OF_MEMORY);


	handlePool.handles[handleNumber].dataAddress=dataAdress;
	handlePool.handles[handleNumber].dataSize=dataSize;



	return(STCD_OK);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_Add								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

JVM_HandleNumber_t  JVM_Handle_new(uint16_t dataSize)
{
	JVM_MemoryAdress_t memoryAddress;
	JVM_HandleNumber_t handleNumber;

	memoryAddress=JVM_Handle_findGap(dataSize);

	while ((memoryAddress %4)>0)
		{
		memoryAddress++;
		}

	handleNumber=JVM_Handle_findFreeHandle();

	handlePool.handles[handleNumber].dataAddress=memoryAddress;
	handlePool.handles[handleNumber].dataSize=dataSize;
	handlePool.handles[handleNumber].referenceCounter=-1;

	JVM_Handle_clearMemory(handleNumber);

return(handleNumber);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_newInstance						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.11			Status : temp   			*/
/*																						*/
/****************************************************************************************/
JVM_HandleNumber_t  JVM_Handle_newInstance(JVM_Class_t * class)
{
	JVM_HandleNumber_t myHandle;

//	myHandle=JVM_Handle_new(class->staticDataSize+INSTANCE_DATA_OFFSET);
	myHandle=JVM_Handle_new(class->instanceDataSize+INSTANCE_DATA_OFFSET);


	if (myHandle==0)
		return(myHandle);

//		JVM_Handle_instanceSetClass(myHandle,class);
		JVM_Handle_setClass(myHandle,class);


	return(myHandle);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_newArray							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.11			Status : temp   			*/
/*																						*/
/****************************************************************************************/
JVM_HandleNumber_t  JVM_Handle_newArray(uint16_t dataSize,JVM_Class_t * class)
{
	JVM_HandleNumber_t myHandle;

	myHandle =JVM_Handle_new(dataSize+ARRAY_DATA_OFFSET);

	if (myHandle==0)
		return(myHandle);

	JVM_Handle_setClass(myHandle,class);

	return(myHandle);
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_findGap							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.2			Status : temp   			*/
/*																						*/
/****************************************************************************************/
void  JVM_Handle_Remove(JVM_Handle_t* myReference)
{

}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_countUp							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.2			Status : temp   			*/
/*																						*/
/****************************************************************************************/
void JVM_Handle_countUp(JVM_HandleNumber_t handleNumber)
{
	handlePool.handles[handleNumber].referenceCounter++;
	if (handlePool.handles[handleNumber].referenceCounter==0)
		handlePool.handles[handleNumber].referenceCounter++;
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_countDown							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.2			Status : temp   			*/
/*																						*/
/****************************************************************************************/
void JVM_Handle_countDown(JVM_HandleNumber_t handleNumber)
{
	handlePool.handles[handleNumber].referenceCounter--;
}





/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setClass						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.12			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_setClass(JVM_HandleNumber_t handleNumber,JVM_Class_t * class)
{
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+CLASS_POINTER_OFFSET,(uint32_t)class));
}



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_ArrayGetClass						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.12			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_getClass(JVM_HandleNumber_t handleNumber,JVM_Class_t * class)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+CLASS_POINTER_OFFSET,class));
}





/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_clearMemory						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.11			Status : working   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_clearMemory(JVM_HandleNumber_t handleNumber)
{
	return(JVM_Heap_clearBlock(handlePool.handles[handleNumber].dataAddress,handlePool.handles[handleNumber].dataSize));
}



/******************************************** Arrays ****************************************************/


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arraySetLenght					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.11			Status : working   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_arraySetLenght(JVM_HandleNumber_t handleNumber,int16_t lenght)
{
	return(JVM_Heap_setShort(handlePool.handles[handleNumber].dataAddress+ARRAY_LENGHT_OFFSET,lenght));

}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetLenght					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.11			Status : working   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_arrayGetLenght(JVM_HandleNumber_t handleNumber,int16_t * lenght)
{
	return(JVM_Heap_getShort(handlePool.handles[handleNumber].dataAddress+ARRAY_LENGHT_OFFSET,lenght));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetLenght					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.11			Status : working   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_getRealAddres(JVM_HandleNumber_t handleNumber,uint32_t * addres)
{
	return(JVM_Heap_getRealAddres(handlePool.handles[handleNumber].dataAddress,addres));
}



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setByte							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : working   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_arraySetByte(JVM_HandleNumber_t handleNumber,uint16_t index,uint8_t value)
{
	return(JVM_Heap_setByte(handlePool.handles[handleNumber].dataAddress+index+ARRAY_DATA_OFFSET,value));

}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arraySetShort(JVM_HandleNumber_t handleNumber,uint16_t index,int16_t value)
{
	return(JVM_Heap_setShort(handlePool.handles[handleNumber].dataAddress+(index<<1)+ARRAY_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arraySetChar(JVM_HandleNumber_t handleNumber,uint16_t index,uint16_t value)
{
	return(JVM_Heap_setShort(handlePool.handles[handleNumber].dataAddress+(index<<1)+ARRAY_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arraySetInt						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arraySetInt(JVM_HandleNumber_t handleNumber,uint16_t index,uint32_t value)
{
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+(index<<2)+ARRAY_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_instanceSetReference				Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arraySetReference(JVM_HandleNumber_t handleNumber,uint16_t index,JVM_HandleNumber_t reference)
{
	JVM_Handle_countUp(reference);
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+(index<<2)+ARRAY_DATA_OFFSET,reference));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arraySetClass						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.12			Status : temp   			*/
/*																						*/
/****************************************************************************************/
/*
uint16_t JVM_Handle_arraySetClass(JVM_HandleNumber_t handleNumber,JVM_Class_t * class)
{
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+ARRAY_CLASS_OFFSET,(uint32_t)class));
}

*/



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setFloat							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arraySetFloat(JVM_HandleNumber_t handleNumber,uint16_t index,float value)
{
	return(JVM_Heap_setFloat(handlePool.handles[handleNumber].dataAddress+(index<<2)+ARRAY_DATA_OFFSET,value));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arraySetLong						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arraySetLong(JVM_HandleNumber_t handleNumber,uint16_t index,uint64_t value)
{
	return(JVM_Heap_setLong(handlePool.handles[handleNumber].dataAddress+(index<<3)+ARRAY_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arraySetDouble					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arraySetDouble(JVM_HandleNumber_t handleNumber,uint16_t index,double value)
{
	return(JVM_Heap_setDouble(handlePool.handles[handleNumber].dataAddress+(index<<3)+ARRAY_DATA_OFFSET,value));
}



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetByte						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetByte(JVM_HandleNumber_t handleNumber,uint16_t index,int8_t * value)
{
	return(JVM_Heap_getByte(handlePool.handles[handleNumber].dataAddress+index+ARRAY_DATA_OFFSET,value));
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetShort						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetShort(JVM_HandleNumber_t handleNumber,uint16_t index,int16_t * value)
{
	return(JVM_Heap_getShort(handlePool.handles[handleNumber].dataAddress+(index<<1)+ARRAY_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetChar						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetChar(JVM_HandleNumber_t handleNumber,uint16_t index,uint16_t * value)
{
	return(JVM_Heap_getChar(handlePool.handles[handleNumber].dataAddress+(index<<1)+ARRAY_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetInt						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetInt(JVM_HandleNumber_t handleNumber,uint16_t index,int32_t * value)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+(index<<2)+ARRAY_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetReference					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetReference(JVM_HandleNumber_t handleNumber,uint16_t index,JVM_HandleNumber_t *reference)
{
	return(JVM_Heap_getReference(handlePool.handles[handleNumber].dataAddress+(index<<2)+ARRAY_DATA_OFFSET,reference));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_ArrayGetClass						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.12			Status : temp   			*/
/*																						*/
/****************************************************************************************/
/*
uint16_t JVM_Handle_ArrayGetClass(JVM_HandleNumber_t handleNumber,JVM_Class_t * class)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+ARRAY_CLASS_OFFSET,class));
}
*/
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetFloat						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetFloat(JVM_HandleNumber_t handleNumber,uint16_t index,float * value)
{
	return(JVM_Heap_getFloat(handlePool.handles[handleNumber].dataAddress+(index<<2)+ARRAY_DATA_OFFSET,value));
}




/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetLong						Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetLong(JVM_HandleNumber_t handleNumber,uint16_t index,int64_t * value)
{

	return(JVM_Heap_getLong(handlePool.handles[handleNumber].dataAddress+(index<<3)+ARRAY_DATA_OFFSET,value));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_arrayGetDouble					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_arrayGetDouble(JVM_HandleNumber_t handleNumber,uint16_t index,double * value)
{

	return(JVM_Heap_getDouble(handlePool.handles[handleNumber].dataAddress+(index<<3)+ARRAY_DATA_OFFSET,value));
}





/************************************** Static **********************************************/

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setByte							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : working   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_staticSetByte(JVM_HandleNumber_t handleNumber,uint16_t index,uint8_t value)
{
	return(JVM_Heap_setByte(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));

}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticSetShort(JVM_HandleNumber_t handleNumber,uint16_t index,int16_t value)
{
	return(JVM_Heap_setShort(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticSetChar(JVM_HandleNumber_t handleNumber,uint16_t index,uint16_t value)
{
	return(JVM_Heap_setShort(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticSetInt(JVM_HandleNumber_t handleNumber,uint16_t index,uint32_t value)
{
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_staticSetFloat					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticSetFloat(JVM_HandleNumber_t handleNumber,uint16_t index,float value)
{
	return(JVM_Heap_setDouble(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticSetLong(JVM_HandleNumber_t handleNumber,uint16_t index,uint64_t value)
{
	return(JVM_Heap_setLong(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_staticSetDouble					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticSetDouble(JVM_HandleNumber_t handleNumber,uint16_t index,double value)
{
	return(JVM_Heap_setDouble(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_staticSetReference				Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticSetReference(JVM_HandleNumber_t handleNumber,uint16_t index,JVM_HandleNumber_t reference)
{
	JVM_Handle_countUp(reference);
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,reference));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getByte							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetByte(JVM_HandleNumber_t handleNumber,uint16_t index,int8_t * value)
{
	return(JVM_Heap_getByte(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetShort(JVM_HandleNumber_t handleNumber,uint16_t index,int16_t * value)
{
	return(JVM_Heap_getShort(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getChar							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetChar(JVM_HandleNumber_t handleNumber,uint16_t index,uint16_t * value)
{
	return(JVM_Heap_getChar(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_staticGetInt							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetInt(JVM_HandleNumber_t handleNumber,uint16_t index,int32_t * value)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_staticGetReference				Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetReference(JVM_HandleNumber_t handleNumber,uint16_t index,JVM_HandleNumber_t *reference)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,reference));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getLong							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetLong(JVM_HandleNumber_t handleNumber,uint16_t index,int64_t * value)
{

	return(JVM_Heap_getLong(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Heap_getDouble							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetFloat(JVM_HandleNumber_t handleNumber,uint16_t index,float * value)
{
	return(JVM_Heap_getFloat(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Heap_getDouble							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_staticGetDouble(JVM_HandleNumber_t handleNumber,uint16_t index,double * value)
{
	return(JVM_Heap_getDouble(handlePool.handles[handleNumber].dataAddress+index+STATIC_DATA_OFFSET,value));
}





/************************************** Instances **********************************************/

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setByte							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : working   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_instanceSetByte(JVM_HandleNumber_t handleNumber,uint16_t index,uint8_t value)
{
	return(JVM_Heap_setByte(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));

}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : working   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceSetShort(JVM_HandleNumber_t handleNumber,uint16_t index,int16_t value)
{
	return(JVM_Heap_setShort(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceSetChar(JVM_HandleNumber_t handleNumber,uint16_t index,uint16_t value)
{
	return(JVM_Heap_setShort(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceSetInt(JVM_HandleNumber_t handleNumber,uint16_t index,uint32_t value)
{
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_instanceSetClass					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.12			Status : temp   			*/
/*																						*/
/****************************************************************************************/
/*
uint16_t JVM_Handle_instanceSetClass(JVM_HandleNumber_t handleNumber,JVM_Class_t * class)
{
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+INSTANCE_CLASS_OFFSET,(uint32_t)class));
}
*/

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_instanceSetFloat					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceSetFloat(JVM_HandleNumber_t handleNumber,uint16_t index,float value)
{
	return(JVM_Heap_setDouble(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_instanceSetReference				Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceSetReference(JVM_HandleNumber_t handleNumber,uint16_t index,JVM_HandleNumber_t reference)
{
	JVM_Handle_countUp(reference);
	return(JVM_Heap_setInt(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,reference));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_setShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceSetLong(JVM_HandleNumber_t handleNumber,uint16_t index,uint64_t value)
{
	return(JVM_Heap_setLong(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_staticSetDouble					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceSetDouble(JVM_HandleNumber_t handleNumber,uint16_t index,double value)
{
	return(JVM_Heap_setDouble(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getByte							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceGetByte(JVM_HandleNumber_t handleNumber,uint16_t index,int8_t * value)
{
	return(JVM_Heap_getByte(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getShort							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceGetShort(JVM_HandleNumber_t handleNumber,uint16_t index,int16_t * value)
{
	return(JVM_Heap_getShort(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getChar							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceGetChar(JVM_HandleNumber_t handleNumber,uint16_t index,uint16_t * value)
{
	return(JVM_Heap_getChar(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getInt							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceGetInt(JVM_HandleNumber_t handleNumber,uint16_t index,int32_t * value)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}



/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_instanceGetClass					Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.12			Status : temp   			*/
/*																						*/
/****************************************************************************************/
/*
uint16_t JVM_Handle_instanceGetClass(JVM_HandleNumber_t handleNumber,JVM_Class_t * class)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+INSTANCE_CLASS_OFFSET,class));
}

*/
/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_instanceGetReference				Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.12			Status : temp   			*/
/*																						*/
/****************************************************************************************/
uint16_t JVM_Handle_instanceGetReference(JVM_HandleNumber_t handleNumber,uint16_t index,JVM_HandleNumber_t *reference)
{
	return(JVM_Heap_getInt(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,reference));
}


/****************************************************************************************/
/*																						*/
/*	Function : JVM_Handle_getLong							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceGetLong(JVM_HandleNumber_t handleNumber,uint16_t index,int64_t * value)
{

	return(JVM_Heap_getLong(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Heap_getDouble							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceGetFloat(JVM_HandleNumber_t handleNumber,uint16_t index,float * value)
{
	return(JVM_Heap_getFloat(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}

/****************************************************************************************/
/*																						*/
/*	Function : JVM_Heap_getDouble							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.1.6			Status : temp   			*/
/*																						*/
/****************************************************************************************/

uint16_t JVM_Handle_instanceGetDouble(JVM_HandleNumber_t handleNumber,uint16_t index,double * value)
{
	return(JVM_Heap_getDouble(handlePool.handles[handleNumber].dataAddress+index+INSTANCE_DATA_OFFSET,value));
}
